#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：PythonData 
@File    ：case11_Funcation.py
@Author  ：朱志文
@Date    ：2021/12/7 8:12 
'''

'''定义函数'''
def f(x):
    value = x**2+1
    return value
print(f(2))


'''f(n)的前n项值'''
def fibs(n):
    result=[0,1]
    for i in range(n-2):
        result.append(result[-2]+result[-1])
    return result
print(fibs(5))


'''判断素数'''
def isPrime(num):
    for i in range(2,num):
        if num%i==0:
            return 0
            break;
    else:
        return 1

def isPrime2(x):
    if x<2:
        return 0;
    i=2;
    while i<=x//i:
        if x%i==0:
            return 0;
        i+=1;
    return 1;

print('是素数'  if  isPrime(5)==1 else '不是素数')
print('是素数'  if  isPrime2(5)==1 else '不是素数')

'''默认参数'''
def init(arg,result=set()):
    result.add(arg)
    return result

print(init('a'))
print(init('b'))


'''可变长参数,形参前加个*，映射成一个元组'''
def countArgs(a,*b):
    print(b)        #输出可变参数
    print(len(b)+1) #输出参数个数
countArgs(1,2,3)
countArgs(4,5,6,7,8)
#实参前加*相当于把序列解包
countArgs(1,*[1,2,3])
countArgs(1,*'2021')

'''变长参数形参前加**，映射成字典'''
def CountDics(a,**b):
    print(b)
    print(len(b))
CountDics(1,a1=2,b=3)
CountDics(4,x1=5,x2=6)
CountDics(4,l1=[7,8],l2=[9,10])

CountDics(4,b={'x':1,'y':2,'z':3})
#实参前加**相当于把字典解包
CountDics(4,**{'x':1,'y':2,'z':3})

'''列表去重并保持原来的次序'''
ls=[2,8,3,2,5,3,8,3,2,5]
s=set()
ls2=[i for i in ls if i not in s and not s.add(i)]
print(ls2)


'''阶乘的递归'''
def fact(num):
    result=1
    for n in range(1,num+1):
        result*=n;
    return result;

m = int(input('m = '))
print(fact(m))

'''练习1：实现计算求最大公约数和最小公倍数的函数。'''
'''最大公约数'''
def gcd(x,y):
    return x if y==0 else gcd(y,x%y)

